package com.ruoyi.system.service;

import com.ruoyi.system.domain.SpokenUserCourseTime;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface ISpokenUserCourseTimeService {

    /**
     * 添加学生购买课时
     * @param list
     * @return
     */
    public int insert(List<SpokenUserCourseTime> list);

    /**
     * 修改
     */
    public int update(SpokenUserCourseTime userCourseTime);

    /**
     * 根据主键ID查询
     */
    public SpokenUserCourseTime selectIdByPrimaryKey(Long uctId);

    /**
     * 根据条件查询未取消的课时：用户ID、教师ID、订单id、日期、时间段Id
     * @param userCourseTime
     * @return
     */
    public List<SpokenUserCourseTime> select(SpokenUserCourseTime userCourseTime);

    /**
     * 查询对应订单选择的课时数量
     * @param orderId
     * @return
     */
    public Integer selectCountByOrderId(Long orderId);

    /**
     * 移动端订单列表：查询对应订单选择的课时数量
     * @param orderId
     * @return
     */
    public Integer mobileSelectCountByOrderId(Long orderId);

    /**
     * 根据订单Id查询课时
     */
    public List<SpokenUserCourseTime> selectUserCourseTimeByOrderId(Long orderId);

    /**
     * 根据用户ID查询用户选择的日期
     */
    public List<SpokenUserCourseTime> selectUserCourseTimeByUserId(Long userId);

    /**
     * 根据日期、用户ID查询对应日期的教师ID
     * @return
     */
    public List<SpokenUserCourseTime> selectTeacherIdByDate(String chooseDate, Long userId);

    /**
     * 查询用户在某个教师下预约了多少节
     * 只查询 状态为 正常 or 已消课的
     * @param useId
     * @param teacherId
     * @return
     */
    public Integer selectLessonNumByTeacherId(@Param("userId")Long useId, @Param("teacherId")Long teacherId);

    /**
     * 查询用户在某个教师下消课了多少节
     * 只查询 状态为 已消课的
     * @param useId
     * @param teacherId
     * @return
     */
    public Integer selectCancelLessonNumByTeacherId(@Param("userId")Long useId, @Param("teacherId")Long teacherId);

    /**
     * 消课
     */
    public int cancelLessonNum(Long uctId);

    /**
     * 请假
     */
    public int leaveLesson(Long uctId);

    /**
     * 查询待消课的课时
     * @return
     */
    public List<SpokenUserCourseTime> selectWaitCancelLesson();

    /**
     * 根据教师ID、开始日期、结束日期查询时间段内的课时选择情况
     * @param teacherId
     * @param startDate
     * @param endDate
     * @return
     */
    public List selectCourseTimeStatusByDate(Long teacherId, String startDate, String endDate);

    /**
     * 查询课时对应的学生、课程分类、会议号信息
     * @param uctId
     * @return
     */
    public Map selectTipsInfoByUctId(Long uctId);


    public Integer selectTeacherCancelLessonCount(Long teacherId, String startDate, String endDate);

    /***
     * 查询距离上课时间两小时内的课程信息
     * @return
     */
    public List<SpokenUserCourseTime> select2HoursFromClass(String date);
}
